[小ネタ]Redshiftの監査ログ出力に必要なS3バケットポリシー
はじめに
こんにちは、AWS事業本部のニシヤマです。はいマスキュラー。
Redshiftの監査ログをS3バケットに出力する際に必要なバケットポリシーの調べたのでご紹介します。
経緯
Redshiftの監査ログは、AWSコンソールのRedshiftの一覧画面からも簡単に設定ができます。
今回、Redshiftの監査ログを事前に作成済みのS3バケットに出力する必要があったのですが、そのままでは出力先に以下のエラーが出て指定することができませんでした。
解決方法
本日時点でバケットポリシーのPrincipalにはAWSアカウントIDではなくサービスプリンシパル名を使用するのが推奨されていますので最新のバケットポリシーの設定は以下を参照してください。
こちらのドキュメントにズバリの情報が書かれていました。こちらのバケットポリシーをS3に設定する必要がありました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<アカウントID>:user/logs" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<S3バケット名>/*" }, { "Sid": "Get bucket policy needed for audit logging ", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<アカウントID>:user/logs" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::<S3バケット名>" } ] }
アカウントIDの部分にはリージョンごとに以下のアカウントID、S3バケット名に関しては監査ログ出力先のS3バケット名に置き換えてください。
リージョン名 | リージョン | アカウント ID |
---|---|---|
米国東部 (バージニア北部) リージョン | us-east-1 | 193672423079 |
米国東部 (オハイオ) リージョン | us-east-2 | 391106570357 |
米国西部 (北カリフォルニア) リージョン | us-west-1 | 262260360010 |
米国西部 (オレゴン) リージョン | us-west-2 | 902366379725 |
アジアパシフィック (香港) リージョン | ap-east-1 | 313564881002 |
アジアパシフィック (ムンバイ) リージョン | ap-south-1 | 865932855811 |
アジアパシフィック (大阪: ローカル) リージョン | ap-northeast-3 | 090321488786 |
アジアパシフィック (ソウル) リージョン | ap-northeast-2 | 760740231472 |
アジアパシフィック (シンガポール) リージョン | ap-southeast-1 | 361669875840 |
アジアパシフィック (シドニー) リージョン | ap-southeast-2 | 762762565011 |
アジアパシフィック (東京) リージョン | ap-northeast-1 | 404641285394 |
カナダ (中部) リージョン | ca-central-1 | 907379612154 |
欧州 (フランクフルト) リージョン | eu-central-1 | 053454850223 |
欧州 (アイルランド) リージョン | eu-west-1 | 210876761215 |
欧州 (ロンドン) リージョン | eu-west-2 | 307160386991 |
EU (パリ) リージョン | eu-west-3 | 915173422425 |
欧州 (ストックホルム) リージョン | eu-north-1 | 729911121831 |
中東 (バーレーン) リージョン | me-south-1 | 013126148197 |
南米 (サンパウロ) リージョン | sa-east-1 | 075028567923 |
今回は出力先が東京リージョンのS3バケットだったので以下のバケットポリシーになりました。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::404641285394:user/logs" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<S3バケット名>/*" }, { "Sid": "Get bucket policy needed for audit logging ", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::404641285394:user/logs" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::<S3バケット名>" } ] }
こちらのポリシーをS3バケットのバケットポリシーの画面で設定します。
こちらのポリシーを設定することによりRedshiftの監査ログの出力設定が可能になります。設定後はS3バケットにテストファイルが出力されていれば完了です!
また、複数のRedshiftクラスターの監査ログの出力先が同じ場合などには、出力設定時にS3キープレフィックスを変えることでS3バケット内にフォルダが作成されるのでクラスターごとのログを区別することも可能です!
おわりに
新規にバケットポリシーを作成する場合は、S3バケットの作成と一緒にバケットポリシーも設定してくるのですが、既存のS3バケットの場合は注意する点も多いですね。この記事がどなたかのお役に立てば幸いです。